    /* -*-jde-*- */
/* <TestCobbled.java> */
package practica2.cobbled;

import java.io.IOException;

/**
 * Clase de prueba para el uso de las clases Cobbled y SquaresBoard.
 *
 * @author Carrillo Espinosa Ernesto
 * @author Peralta Santa Anna Victor Miguel
 * @since	Julio 2011
 */
public class TestCobbled extends Cobbled {

    /**
     * Cuadricula
     */
    private int[][] grid;
    /**
     * Coordenadas para el cuadrado especial
     */
    private int x, y;

    /**
     * Da un ejemplar de la clase. El tamaño del tablero debe de ser potencia de
     * 2.
     *
     * @param n el tamaño del tablero
     * @param x la posicion a lo ancho del cuadro especial
     * @param y la posicion a lo largo del cuadro especial
     */
    public TestCobbled(int n, int x, int y) throws IOException {
        super(n);
        this.grid = new int[n][n];
        this.x = x;
        this.y = y;
    }

    /**
     * Un ejemplo de coloreo para la cuadricula recursiva
     *
     * @return Un ejemplar de la cuadricula coloreada.
     */
    @Override
    public int[][] recursiveCobbled() {
        auxRecursiveCobbled();
        return grid;
    }

    /**
     * Aqui coloreamos la cuadricula con los colores que queremos.
     */
    private void auxRecursiveCobbled() {

        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid.length; j++) {
                grid[i][j] = ((i + j) % 2) + 1;
            }
        }

        grid[x][y] = 0; // cuadrado especial
    }

    /**
     * Un ejemplo de coloreo para la cuadricula iterativa.
     *
     * @return Un ejemplar de la cuadricula coloreada.
     */
    @Override
    public int[][] iterativeCobbled() {
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid.length; j++) {
                grid[i][j] = ((i + j) % 2) + 1;
            }
        }
        grid[x][y] = 0;
        auxIterativeCobbled();
        return grid;
    }

    /**
     * Aqui coloreamos la cuadricula con los colores que queremos.
     */
    /*
     * private void auxIterativeCobbled() {
     *
     * for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid.length;
     * j++) { grid[i][j] = ((i + j) % 2) + 2; } }
     *
     * grid[x][y] = 0; // cuadrado especial }
     */
    private void auxIterativeCobbled() {
        int size = grid.length - 1;
        int x1 = x;
        int y1 = y;
        int x2,x3,x4,x5,x6,x7;
        for (int i = size; i > 0; i = i / 2) {
            for (int j = 0; j < Math.pow(2, j); j++) {
                if (x1 <= i / 2 && y1 <= i / 2) {
                    grid[i / 2][(i / 2) + 1] = 0;
                    grid[(i / 2) + 1][(i / 2) + 1] = 0;
                    grid[(i / 2) + 1][i / 2] = 0;
                } else if (x1 <= i / 2 && y1 > i / 2) {
                    grid[i / 2][i / 2] = 0;
                    grid[(i / 2) + 1][i / 2] = 0;
                    grid[(i / 2) + 1][(i / 2) + 1] = 0;
                } else if (x1 > i / 2 && y1 <= i / 2) {
                    grid[i / 2][i / 2] = 0;
                    grid[i / 2][(i / 2) + 1] = 0;
                    grid[(i / 2) + 1][(i / 2) + 1] = 0;
                } else if (x1 > i / 2 && y1 > i / 2) {
                    grid[i / 2][i / 2] = 0;
                    grid[i / 2][(i / 2) + 1] = 0;
                    grid[(i / 2) + 1][i / 2] = 0;
                }
            }
        }
    }

    /**
     * Método para la prueba de la clase
     *
     * @param args argumentos de la linea de comandos
     */
    public static void main(String[] args) {
        try {
            int i = 7 / 2;
            System.out.println(i);
            new TestCobbled(8, 7, 7);

        } catch (IOException ioe) {
            System.err.println(ioe.toString() + "\n\n");
        }
    }
}
